package ec.edu.ups.rhc.controlador;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;

import org.primefaces.event.RowEditEvent;

import ec.edu.ups.rhc.datos.ClienteWS;
import ec.edu.ups.rhc.datos.ProveedorDAO;
import ec.edu.ups.rhc.modelo.Proveedor;
import ec.edu.ups.rhc.servicio.client.ProductoS;
import ec.edu.ups.rhc.servicio.client.ReservaS;


@ManagedBean
@ViewScoped
public class ProductosBean {

	@Inject	private ProveedorDAO dao;
	@Inject private ClienteWS cliente;
	@Inject FacesContext context;
	
	private List<Proveedor> listaProveedores;
	public List<ProductoS> productos=new ArrayList<ProductoS>();
	public List<ProductoS> productosSeleccionados=new ArrayList<ProductoS>();
	ReservaS reserva;
	ProductoS p;
	/**
	 * Método que se ejecuta posterior a la creación(instancia) del JavaBean 
	 */
	@PostConstruct
	public void init()
	{

		reserva=new ReservaS();
		listaProveedores=dao.listar();
		for(Proveedor p:listaProveedores)
		{
			
			List<ProductoS> listaProductosAux=null;
			try{
			listaProductosAux= cliente.listarProductos(p.getUrlConsulta());
			for(ProductoS ps:listaProductosAux)
			{	
				ps.setProveedor(p.getUrlConsulta());
				ps.provedorObj=p;
				productos.add(ps);
			
			}
			
			}catch(Exception ex)
			{
				listaProductosAux=new ArrayList<ProductoS>();
			}
			p.setProductos(listaProductosAux);
			
		}	
		
	}

	/**
	 * Encapsulacion
	 */
	public List<Proveedor> getListaProveedores() {return listaProveedores;	}
	public void setListaProveedores(List<Proveedor> listaProveedores) {this.listaProveedores = listaProveedores;	}
	public List<ProductoS> getProductos() {return productos;}
	public void setProductos(List<ProductoS> productos) {this.productos = productos;}
	public ReservaS getReserva() {	return reserva;	}
	public void setReserva(ReservaS reserva) {	this.reserva = reserva;	}
	public ProductoS getP() {	return p;}
	public void setP(ProductoS p) {	System.out.println("selec"); this.p = p;	this.productos.add(p);}
	

	public List<ProductoS> getProductosSeleccionados() {
		return productosSeleccionados;
	}

	public void setProductosSeleccionados(List<ProductoS> productosSeleccionados) {
		this.productosSeleccionados = productosSeleccionados;
	}

	/**
	 * Action controllers
	 */
	public String guardar()
	{
		cliente.reservar(productosSeleccionados, reserva);
		context.addMessage(null, new FacesMessage("Guardado exitoso", "Guardado exitoso") );
		return null;
	}
	
	public String addProducto(ProductoS p)
	{
		System.out.println("Add Producto");
		if(productosSeleccionados.contains(p)==false)
			this.productosSeleccionados.add(p);
		return null;
	}
	public String removeProducto(ProductoS p)
	{
		System.out.println("Remove Producto");
		this.productosSeleccionados.remove(p);
		return null;
	}
	
}
